home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / util / shell / dbGoodies.lha / goodies / IsResident.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-09-13  |  3.1 KB  |  109 lines

  1. /*
  2.     IsResident.c            von Daniel Balster
  3.     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.  
  5.     ISRESIDENT
  6.  
  7.  
  8.     Format:        ISRESIDENT <name> [SYSTEM]
  9.  
  10.     Schablone:        NAME,SYSTEM/S
  11.  
  12.     Funktion:        Es wird überprüft, ob ein Befehl bereits in der Liste
  13.             der residenten Befehle aufgeführt ist.
  14.  
  15.     Pfad:        C: (empfolen), oder mittels PATH <mydir> ADD zugänglich
  16.             machen, wobei <mydir> der Pfad zum ISRESIDENT Kommando
  17.             ist.
  18.  
  19.     Übersetzung:    dcc IsResident.c -o C:IsResident (DICE, z.B. von AmigaLibDisk491)
  20.  
  21.     Beschreibung:
  22.  
  23.     Mit diesem Befehl wird überprüft, ob der angegebene Name in der Liste der
  24.     residenten Befehle vorhanden ist. Dies kann dazu benutzt werden, um das
  25.     mehrfache laden von einem Befehl in die Liste der residenten Befehle zu
  26.     vermeiden.
  27.  
  28.     Mit dem Merkmal SYSTEM wird nach Befehlen gesucht, die als SYSTEM gekenn-
  29.     zeichnet sind. Dies führt normalerweise immer zu einem positiven Ergebnis,
  30.     könnte sich aber in zukünftigen Betriebsystemversionen ändern.
  31.  
  32.     Rückgabewerte:
  33.  
  34.     0    (OK)    Name ist bereits resident geladen
  35.  
  36.     5    (WARN)  Name ist noch nicht resident geladen
  37.  
  38.     10    (ERROR) Es wurde kein Argument angegeben.
  39.  
  40.     20    (FAIL)  System Fehler! (kein Speicher, etc.)
  41.  
  42.     Mit ISRESIDENT kann man bequem in Shell-Skripts die Verwaltung von residenten
  43.     Befehlen erledigen.
  44.  
  45.     Beispiele:
  46.  
  47.     1> ISRESIDENT Shell SYSTEM
  48.     Shell is resident
  49.     1>
  50.  
  51.     1> ISRESIDENT qwertzuiop
  52.     qwertzuiop is not resident
  53.     1>
  54.  
  55.     Beispiel in einer Skipt-Datei:
  56.  
  57.     ISRESIDENT >NIL: dcc        ;   falls man vorher schon mal dcc geladen
  58.     IF WARN                ;   hatte, wird jetzt der entsprechende
  59.     resident DiCE:bin/dcc pure add    ;   Teil übersprungen.
  60.     ENDIF                ;
  61.  
  62.     Siehe auch: RESIDENT, SET
  63. */
  64.  
  65. #include <exec/exec.h>            // Notwendige Includes
  66. #include <clib/exec_protos.h>
  67. #include <dos/dos.h>
  68. #include <clib/dos_protos.h>
  69.  
  70. // AmigaDOS Versionstring
  71. UBYTE *Vers[] = "$VER: isresident v1.0\0";
  72.  
  73. struct Argumente {
  74.     STRPTR  Name;            // Unsere Befehlsschablone
  75.     BOOL    System;            // als Feststruktur
  76. } Ergebnis;
  77.  
  78. int main (void)
  79. {
  80.     struct RDArgs   *rdargs;        // Argumentstruktur
  81.     int         erg;        // Rückgabewert.
  82.  
  83.     if( rdargs = ReadArgs( "NAME,SYSTEM/S", &Ergebnis, NULL ) )
  84.     {
  85.     if( Ergebnis.Name )         // Wurde ein Name angegeben ?
  86.     {
  87.         Forbid();               // Multitasking ausschalten wegen Systemlistenzugriff
  88.         if( FindSegment( Ergebnis.Name, NULL, Ergebnis.System ) )
  89.         {
  90.         erg = RETURN_OK;    // <Name> wurde gefunden
  91.         VPrintf( "%s is resident\n", &Ergebnis.Name );
  92.         } else {
  93.         erg = RETURN_WARN;  // <Name> wurde nicht gefunden
  94.         VPrintf( "%s is not resident\n", &Ergebnis.Name );
  95.         }
  96.         Permit();               // Multitasking wieder erlauben
  97.     } else {            // Fehlermeldung generieren und Fehlercode setzen
  98.         PrintFault( ERROR_REQUIRED_ARG_MISSING, 0 );
  99.         erg = RETURN_ERROR;
  100.     }
  101.     FreeArgs( rdargs );         // Argumente wieder freigeben
  102.     } else {
  103.     PrintFault( IoErr(), 0 );   //  Hier ist ein schwerwiegender Fehler
  104.     erg = RETURN_FAIL;        //    aufgetreten. Kommt normalerweise NIE vor
  105.     }
  106.     return erg;             // Ergebnis zurückliefern
  107. }
  108.  
  109.